package com.github.javaplugs.mybatis;
import static org.assertj.core.api.Assertions.*;
import org.testng.annotations.*;
import org.apache.ibatis.session.SqlSession;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
public class TimeTest {
SqlSession session;
TimeMapper mapper;
@BeforeClass
public void before() {
//PostgresqlSuite.INIT();
session = TestSuite.getSessionFactory().openSession();
mapper = session.getMapper(TimeMapper.class);
}
@AfterClass
public void after() {
session.close();
}
@Test(priority = 0, dataProvider = "time")
public void timePut(long id, Instant instant, LocalTime localt) {
TimeRow row = new TimeRow();
row.setId(id);
row.setInstant(instant);
row.setLocalt(localt);
assertThat(mapper.set(row)).isEqualTo(1);
session.commit();
}
@Test(priority = 1, dataProvider = "time")
public void timeGet(long id, Instant instant, LocalTime localt) {
TimeRow row = mapper.get(id);
if (id % 10 == 0) {
assertThat(row.getInstant()).isNull();
assertThat(row.getLocalt()).isNull();
} else {
assertThat(row.getInstant()).isEqualTo(instant);
assertThat(row.getLocalt()).isEqualTo(localt);
}
}
Object[][] timeCache;
@DataProvider(name = "time")
public synchronized Object[][] timeData() {
if (timeCache == null) {
timeCache = new Object[][]{
new Object[]{10L, null, null},
new Object[]{11L, Instant.now(), LocalTime.now().truncatedTo(ChronoUnit.SECONDS)},};
}
return timeCache;
}
@Test(priority = 0, dataProvider = "date")
public void datePut(long id, LocalDateTime localdt, OffsetDateTime offsetdt, ZonedDateTime zoneddt) {
TimeRow row = new TimeRow();
row.setId(id);
row.setLocaldt(localdt);
row.setOffsetdt(offsetdt);
row.setZoneddt(zoneddt);
assertThat(mapper.set(row)).isEqualTo(1);
session.commit();
}
@Test(priority = 1, dataProvider = "date")
public void dateGet(long id, LocalDateTime localdt, OffsetDateTime offsetdt, ZonedDateTime zoneddt) {
TimeRow row = mapper.get(id);
if (id % 10 == 0) {
assertThat(row.getLocaldt()).isNull();
assertThat(row.getOffsetdt()).isNull();
assertThat(row.getZoneddt()).isNull();
} else {
assertThat(row.getLocaldt()).isEqualTo(localdt);
assertThat(row.getOffsetdt().isEqual(offsetdt)).isTrue();
assertThat(row.getZoneddt().isEqual(zoneddt)).isTrue();
}
}
Object[][] dateCache;
@DataProvider(name = "date")
public synchronized Object[][] dateData() {
if (dateCache == null) {
dateCache = new Object[][]{
new Object[]{20L, null, null, null},
new Object[]{21L, LocalDateTime.now(), OffsetDateTime.now(), ZonedDateTime.now()},
new Object[]{22L, LocalDateTime.now(), OffsetDateTime.now().withOffsetSameInstant(ZoneOffset.UTC), ZonedDateTime.now().withZoneSameInstant(ZoneId.of("Z"))},
new Object[]{23L, LocalDateTime.now(), OffsetDateTime.now().withOffsetSameInstant(ZoneOffset.of("+14:00")), ZonedDateTime.now().withZoneSameInstant(ZoneId.of("Z"))},
new Object[]{24L, LocalDateTime.now(), OffsetDateTime.now().withOffsetSameLocal(ZoneOffset.MAX), ZonedDateTime.now().withZoneSameLocal(ZoneId.of("GMT+20"))},
new Object[]{25L, LocalDateTime.now(), OffsetDateTime.now().withOffsetSameInstant(ZoneOffset.MIN), ZonedDateTime.now().withZoneSameInstant(ZoneId.of("GMT-22"))}
};
}
return dateCache;
}
}